package com.cnap.db.mapper;

import com.cnap.db.entity.StagePO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * 阶段mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface StageMapper {


    /**
     * 插入阶段信息
     *
     * @param stagePO 阶段信息
     * @return 结果
     */
    int insertStage(@Param("stage") StagePO stagePO);

    /**
     * 根据服务id和类型查询阶段
     *
     * @param serviceId 服务id
     * @param type      类型
     * @return 阶段
     */
    List<StagePO> selectStageByServiceIdAndType(@Param("serviceId") String serviceId, @Param("type") String type);


    /**
     * 根据服务id和二级分类查询阶段
     *
     * @param serviceId  服务id
     * @param detailType 二级分类
     * @return 阶段
     */
    StagePO selectStageByServiceIdAndDetailType(@Param("serviceId") String serviceId,
                                                @Param("detailType") String detailType);

    /**
     * 根据服务id和二级分类查询阶段
     *
     * @param serviceId  服务id
     * @param detailType 二级分类
     * @return 阶段
     */
    StagePO selectStageByServiceIdAndDetailType2(@Param("serviceId") String serviceId,
                                                @Param("detailType") String detailType,
                                                 @Param("cloudScope") String cloudScope,
                                                 @Param("arch") String arch);


    /**
     * 根据服务id删除
     *
     * @param serviceId 服务id
     * @return 结果
     */
    int deleteStageByServiceId(@Param("serviceId") String serviceId);

    /**
     * 根据id删除
     *
     * @param id id
     * @return 结果
     */
    int deleteStageById(@Param("id") String id);

    /**
     * 根据id列表删除
     *
     * @param ids ids
     * @return 结果
     */
    int deleteStageByIds(@Param("ids") List<String> ids);

    /**
     * 根据类型和服务id删除
     *
     * @param svcId 服务id
     * @param type  类型
     * @return 结果
     */
    int deleteStageByServiceIdAndType(@Param("svcId") String svcId, @Param("type") String type);

    /**
     * 根据服务id查询
     *
     * @param serviceId 服务id
     * @return 结果
     */
    List<StagePO> selectStagesByServiceId(@Param("serviceId") String serviceId);

    /**
     * 根据id更新error错误为空
     *
     * @param stageId id
     * @param error   错误信息
     * @return 结果
     */
    int updateStageErrorById(@Param("id") String stageId, @Param("error") String error);

    /**
     * 更新extraInfo
     *
     * @param svcId      微服务id
     * @param detailType 详细阶段
     * @param extraInfo  extraInfo
     * @return 结果
     */
    int updateStageExtraInfoBySvcIdAndDetailType(@Param("svcId") String svcId, @Param("detailType") String detailType
            , @Param("extraInfo") List<Map<String, String>> extraInfo);

}
